﻿#pragma once
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<Windows.h>
#include<locale.h>
#include<time.h>
#include<stdbool.h>
#include<stdlib.h>

#define Pos_X 20
#define Pos_Y 9
#define Wall L'◆'
#define Body L'●'
#define Food L'☆'

//蛇的方向
enum DIRECTION
{
	UP=1,
	DOWN,
	LEFT,
	RIGHT
};

//蛇的运动状态
enum GAME_STATUS
{
	OK,//正常
	KILL_BY_WALL,//撞墙
	KILL_BY_SELF,//撞到自己
	END_NORMAL//正常退出
};

//蛇身节点
typedef struct SnakeNode
{
	int x;
	int y;
	struct SnakeNode* next;
}SnakeNode,*pSnakeNode;

typedef struct Snake
{
	pSnakeNode _pSnake;//指向蛇头的指针
	pSnakeNode _pFood;//指向食物的指针
	enum DIRECTION _dir;//方向
	enum GAME_STATUS _status;//状态
	int _food_weight;//食物分数
	int _score;//总分数
	int _sleep_time;//休息时间
}Snake,*pSnake;


//开始游戏
void GameStart(pSnake ps);
//游戏运行
void GameRun(pSnake ps);
//游戏善后
void GameEnd(pSnake ps);


//地图打印
void CreatMap();
//创建蛇
void InitSnake(pSnake ps);
//创建食物
void CreatFood(pSnake ps);

//蛇的移动
void SnakeMove(pSnake ps);
//下一个不是食物
void NOFood(pSnakeNode pn, pSnake ps);
//检查蛇是否撞墙
void KillByWall(pSnake ps);
//检测是否撞到自己
void KillBySelf(pSnake ps);
//吃食物
void EatFood(pSnakeNode pn, pSnake ps);

//定义光标位置
void SetPos(short x, short y);
//欢迎界面
void WelcomeToGame();
//颜色设置
void color(int c);